package localhost.mb;

import java.text.NumberFormat;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import localhost.ejb.DaoOrcamento;
import localhost.model.Categoria;
import localhost.view.MessageBean;
import localhost.view.PageTransitionBean;
import localhost.view.ViewCategoria;

@ManagedBean(name = "mbCategoria")
@SessionScoped
public class MbCategoria {

	@EJB
	DaoOrcamento daoOrca;

	private ViewCategoria tela = new ViewCategoria();
	PageTransitionBean pt = new PageTransitionBean();
	MessageBean mb = new MessageBean();
	MetodosComuns mc = new MetodosComuns();
	FacesContext fc = FacesContext.getCurrentInstance();

	Date dataAlteracao = new Date();
	NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance();

	public void novaCategoria() {
		Categoria cat = this.tela.getCategoria();
		try {
			daoOrca.salvar(cat);
			msgRetornoGeral("frmIndex", "Categoria salva com êxito!");
		} catch (Exception e) {
			msgRetornoGeral("frmIndex",
					"Não foi possível realizar ação: Salvar!");
			e.printStackTrace();
		}
		populaListaCategorias();
	}

	public void populaListaCategorias() {
		List<Categoria> categorias = daoOrca.listaCategorias();
		System.out.println("Total categorias: " + categorias.size());
		this.tela.setCategorias(categorias);
	}

	public void excluir(Categoria cat) {
		int resp = daoOrca.emUsoCategoria(cat);
		if (resp == 0) {
			try {
				daoOrca.excluiCategoria(cat);
				msgRetornoGeral("frmIndex", "Categoria excluída com êxito!");
				this.tela.setVisibilidadeButton(false);
				this.tela.setCategoria(new Categoria());
			} catch (Exception e) {
				msgRetornoGeral("frmIndex",
						"Não foi possível realizar ação: Excluir!");
				e.printStackTrace();
			}
		}else{
			msgRetornoGeral("frmIndex",
					"Não foi possível excluir a categoria: " + cat.getDescricao()
					+ " pois a mesma já esta sendo usada "+resp+" vez(es)");
		
		}
		populaListaCategorias();

	}

	public String montaTelaInicial() {
		this.tela.setVisibilidadeButton(false);
		this.tela.setCategoria(new Categoria());
		populaListaCategorias();
		return pt.chamaCategoria();
	}

	public void montaTelaEditar(Categoria cat) {
		this.tela.setVisibilidadeButton(true);
		this.tela.setCategoria(cat);
	}

	public void alteraCategoria() {
		Categoria cat = this.tela.getCategoria();
		try {
			daoOrca.atualizar(cat);
			this.tela.setVisibilidadeButton(false);
			this.tela.setCategoria(new Categoria());
			msgRetornoGeral("frmIndex", "Categoria alterada com êxito!");
		} catch (Exception e) {
			msgRetornoGeral("frmIndex",
					"Não foi possível realizar ação: Alterar!");
			e.printStackTrace();
		}
		populaListaCategorias();

	}

	public ViewCategoria getTela() {
		this.tela.setComboTipo(mc.getComboTipo());
		return tela;
	}

	public void setTela(ViewCategoria tela) {
		this.tela = tela;
	}

	// ############################ MENSAGENS #############################
	public void msgRetornoGeral(String idComp, String msg) {
		mb.addMessageSemBundle(msg, idComp, FacesMessage.SEVERITY_WARN);
	}

}